Skip to main content

大型 G 代码文件的预处理

这个 CNC15_LargeGCode.project 示例项目位于的安装目录中 CODESYS 下面 ..\CODESYS SoftMotion\Examples

该示例项目显示了如何处理大型 G 代码文件。由于超大文件在 CAD/CAM 系统的输出中特别常见,因此本案例以示例为例

CAD/CAM 系统通常生成包含数十万行的 G 代码文件。它们由非常短的线性段组成(G1),通常在 100 微米到一毫米之间。这些短的线性段描绘工件的轮廓。它们不能形成一条平坦的道路。切线通常在线性段之间跳转

该示例说明如何在恒定的内存要求下高效地读取这些大文件,以及如何在由这么多短线性段组成的路径上实现平滑的速度曲线。在预处理 G 代码时重建了工件的原始轮廓

应用程序的结构

该结构是数控应用的典型结构。G 代码在后台任务中读取PathTask),路径预处理也在这里进行。插值是在总线任务中执行的 (MainTask)。

读取大文件

为了缩短 G 代码处理开始时的延迟,在后台任务中使用了循环。为简单起见,使用计数器来表示中止条件。根据应用程序、G 代码和 PLC 性能,其他中止条件(例如计时器)可能有用。当路径队列已满时,循环将在达到此中止条件之前结束

// Set this value depending on your other tasks, PLC performance, and G-Code
counter := 25;

WHILE counter > 0 AND
      (poqDataOut = 0 OR_ELSE (NOT poqDataOut^.bFull AND NOT poqDataOut^.bEndOfList))
DO
     <Read G-Code and process it>

     counter := counter - 1;
END_WHILE

通过管道铺设在 预处理,即使是非常大的 G 代码文件也可以在不变的内存要求下读取。选择的队列大小要足够大,以便对应的功能块进行足够的预测。

的输出队列 SMC_NCInterpreter 也是的输入队列 smc_smoothMerg。总共为输出队列保留了 128+3 个元素。3 是预 SMC_OutQueue 还有 128 个可用作预测 SMC_SmoothMergeSMC_SmoothMerge 将最多 128 个短线性段合并为一个样条。

的输出队列 SMC_SmoothMerge 也是的输入队列 smc_smoothPathSMC_SmoothPath 需要至少 2 个元素,外加 3 个元素的储备作为预测。如果 M 函数位于两个平滑元素之间,则根据 M 函数的数量需要更多元素

的输出队列 SMC_SmoothMerge 也是的输入队列 SMC_Interpolator。对 100 个元素的预测适用于大多数应用。有关更多信息,请参阅以下内容: 路径预处理和队列大小

/// Buffer of the interpreter, lookahead for SMC_SmoothMerge
aBufIp : ARRAY[0..130] OF SMC_GeoInfo;
/// Buffer of SMC_SmoothMerge
aBufSmm : ARRAY[0..15] OF SMC_GeoInfo;
/// Buffer of SMC_SmoothPath, lookahead for SMC_Interpolator
aBufSmp : ARRAY[0..99] OF SMC_GeoInfo;

线性段的预处理

这个 SMC_SmoothMerge 功能块可确保在许多非常短的线性段上保持平滑的速度曲线。它将尽可能多的连续线性段组合成一个样条,同时保持规定的公差。在此示例中,X 和 Y 的最大偏差为 0.1 mm(PARAMETERS.piMaxDifference)。

. 这些图显示了分步处理:
  1. 读取短线性片段

    _sm_img_example_long_g_code1.png
  2. 使用以下命令将多个线性段组合成样条曲线 SMC_SmoothMerge

    _sm_img_example_long_g_code2.png
  3. 在样条曲线之间进行平滑处理 SMC_SmoothPath 因为,如上所示,样条彼此之间没有切向连接。

    _sm_img_example_long_g_code3.png

调试

  1. 生成应用程序并将其下载到控制器。

  2. 打开跟踪记录并将其下载到控制器。

  3. 启动应用程序。

  4. 您可以跟踪 G 代码的处理情况。